home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / LIBRARY / PAS_0693 / FEXISTS.PAS < prev    next >
Pascal/Delphi Source File  |  1993-06-30  |  2KB  |  64 lines

  1. {─ Fido Pascal Conference ────────────────────────────────────────────── PASCAL ─
  2. Msg  : 169 of 245
  3. From : Sean Palmer                         1:104/123.0          15 Jun 93  00:31
  4. To   : All
  5. Subj : File Exist funtion again
  6. ────────────────────────────────────────────────────────────────────────────────
  7. I just ran some timings, which are gonna be affected by SMARTDRV.EXE
  8. being loaded, but I took that into account (ran multiple times on same
  9. file, and took timings on second/subsequent runs, to make sure always
  10. got cache hits)
  11.  
  12. What I got was that FileExists below and my modified version of that
  13. fileExist3 function that's been floating around this echo for a while
  14. (no bug) both run neck and neck... it's amazing... both are slightly
  15. faster than FileExist2 and lots lots faster than the 'reset,
  16. fileExist=(ioresult=0)' type thing that most people still seem to use...
  17.  
  18. I'd recommend using the first one below as it's really short...}
  19.  
  20. uses dos;
  21.  
  22. function fileExists(var s:string):boolean;begin  {tied for fastest}
  23.  fileExists:=fSearch(s,'')<>'';
  24.  end;
  25.  
  26. function fileExist2(var s:string):boolean;var r:searchrec;begin {2nd}
  27.  findfirst(s,anyfile,r);
  28.  fileExist2:=(dosError=0);
  29.  end;
  30.  
  31. function fileExist3(var s:string):boolean; assembler;asm
  32. {tied for fastest}
  33.  
  34.  push ds
  35.  lds si,s      {need to make ASCIIZ}
  36.  cld
  37.  lodsb       {get length; si now points to first char}
  38.  xor ah,ah
  39.  mov bx,ax
  40.  mov al,[si+bx]  {save byte before placing terminating null}
  41.  push ax
  42.  mov byte ptr [si+bx],0
  43.  mov dx,si
  44.  mov ax,$4300    {get file attributes}
  45.  int $21
  46.  mov al,1   {if carry set, fail}
  47.  pop dx
  48.  mov [si+bx],dl  {restore byte}
  49.  pop ds
  50.  end;
  51.  
  52. function fileExist4(var s:string):boolean; var f:file;begin {slowest}
  53.  assign(f,s);
  54.  {$I-}
  55.  reset(f);
  56.  {$I+}
  57.  if ioresult=0 then begin
  58.   close(f);
  59.   fileExist4:=true;
  60.   end
  61.  else fileExist4:=false;
  62.  end;
  63.  
  64. const s:string='\autoexec.bat';